/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package productos.beans;

import entities.Producto;
import entities.Usuario;
import facades.LineaPedidoFacade;
import facades.ProductoFacade;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import javax.enterprise.context.SessionScoped;
import javax.enterprise.event.Event;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.context.RequestContext;
import qualifiers.EventoEntidadEditada;
import qualifiers.EventoEntidadElegida;
import qualifiers.UsuarioLogeado;

/**
 *
 * @author damfercer
 */
@Named
@SessionScoped
public class EditarProductoBean implements Serializable{
    private Producto productoEditado;
    @Inject
    private ProductoFacade productoFacade;
    @Inject
    @UsuarioLogeado
    private Usuario usuarioLogeado;
    @Inject
    @EventoEntidadEditada
    private Event<Producto> eventoProductoEditado;
    @Inject
    private LineaPedidoFacade lineaPedidoFacade;

    /**
     * Creates a new instance of NuevoProductoBean
     */
    public EditarProductoBean() {
        productoEditado=new Producto();
    }

    /**
     * @return the productoEditado
     */
    public Producto getProductoEditado() {
        return productoEditado;
    }

    /**
     * @param productoEditado the productoEditado to set
     */
    public void setProductoEditado(Producto productoEditado) {
        this.productoEditado = productoEditado;
    }
    
    public void editarProducto(){
            Date ahora=new Date();
            productoEditado.getUltimoUsuario().getProductosUltimoModificadoList().remove(productoEditado);
            productoEditado.setUltimoUsuario(usuarioLogeado);
            productoEditado.setUltimaModificacion(ahora);
            if(productoFacade.serieTallajeModificada(productoEditado)){
                //TODO: Comprobar que no tiene ventas asociadas
            }
            eventoProductoEditado.fire(productoEditado);
            productoFacade.edit(productoEditado);
            if(usuarioLogeado.getProductosUltimoModificadoList()==null){
                usuarioLogeado.setProductosUltimoModificadoList(new ArrayList<Producto>());
            }
            usuarioLogeado.getProductosUltimoModificadoList().add(productoEditado);
            RequestContext context = RequestContext.getCurrentInstance();
            context.execute("dialogoEditarProducto.hide();");
    }
    
    public void onElegirProducto(@Observes @EventoEntidadElegida Producto p){
        this.productoEditado=p;
    }
    
    public Boolean puedeEditarSerieTallaje(){
        return lineaPedidoFacade.getCantidadVendidaDeProducto(productoEditado)<=0;
    }
}
